En Ruby, un appel de méthode n'est pas un saut statique vers une adresse mémoire ; c'est un événement dynamique d'événement de transmission de message. Quand vous invoquez une méthode, vous envoyez un message à un destinataire. Ce message est composé du nom de la méthode, d'arguments facultatifs et d'une éventuelle association de bloc.
1. Syntaxe d'appel et ambiguïté
Ruby permet une grande flexibilité : Foo.Bar et Foo.Bar() sont identiques. Toutefois, Foo::Bar se réfère généralement à une constante, tandis que Foo::Bar() force un appel de méthode. Les parenthèses sont souvent omises pour créer des expériences similaires aux DSL où les méthodes ressemblent à des propriétés.
2. Découpage des opérateurs
Les opérateurs sont en réalité méthodes redéfinissables. L'expression expr1 + expr2 est du sucre syntaxique pour (expr1).+(expr2). Cela s'applique aux opérateurs unaires (-obj), binaires (a < b), et aux opérateurs suffixes.
3. Le mécanisme yield
Les méthodes utilisent yield pour pousser le flux de contrôle dans le bloc associé. En utilisant Kernel.block_given?, une méthode peut décider dynamiquement comment gérer la logique en fonction du contexte de l'appelant.